24 research outputs found
Exact Gap Computation for Code Coverage Metrics in ISO-C
Test generation and test data selection are difficult tasks for model based
testing. Tests for a program can be meld to a test suite. A lot of research is
done to quantify the quality and improve a test suite. Code coverage metrics
estimate the quality of a test suite. This quality is fine, if the code
coverage value is high or 100%. Unfortunately it might be impossible to achieve
100% code coverage because of dead code for example. There is a gap between the
feasible and theoretical maximal possible code coverage value. Our review of
the research indicates, none of current research is concerned with exact gap
computation. This paper presents a framework to compute such gaps exactly in an
ISO-C compatible semantic and similar languages. We describe an efficient
approximation of the gap in all the other cases. Thus, a tester can decide if
more tests might be able or necessary to achieve better coverage.Comment: In Proceedings MBT 2012, arXiv:1202.582
Advanced compiler design and implementation
From the Foreword by Susan L. Graham: This book takes on the challenges of contemporary languages and architectures, and prepares the reader for the new compiling problems that will inevitably arise in the future. The definitive book on advanced compiler design This comprehensive, up-to-date work examines advanced issues in the design and implementation of compilers for modern processors. Written for professionals and graduate students, the book guides readers in designing and implementing efficient structures for highly optimizing compilers for real-world languages. Covering advanced issues in fundamental areas of compiler design, this book discusses a wide array of possible code optimizations, determining the relative importance of optimizations, and selecting the most effective methods of implementation. * Lays the foundation for understanding the major issues of advanced compiler design * Treats optimization in-depth * Uses four case studies of commercial compiling suites to illustrate different approaches to compiler structure, intermediate-code design, and optimization-these include Sun Microsystems's compiler for SPARC, IBM's for POWER and PowerPC, DEC's for Alpha, and Intel's for Pentium an related processors * Presents numerous clearly defined algorithms based on actual cases * Introduces Informal Compiler Algorithm Notation (ICAN), a language devised by the author to communicate algorithms effectively to peopl
The Complexity of Finite Memory Programs with Recursion
In an earlier paper (JACM, 1976) we studied the computational complexity of a number of questions of both programming and theoretical interest (e.g. halting, looping, equivalence) concerning the behaviour of programs written in an extremely simple programming language. These finite memory programs or fmps model the behaviour of FORTRAN-like programs with a finite memory whose size can be determined by examination of the program itself.The present paper is a continuation in which we extend the analysis to include ALGOL-like programs (called fmp^(rec) s) with the finite memory augmented by an implicit pushdown stack used to support recursion.Our major results are the following. First, we show that at least deterministic exponential time is required to determine whether a program in the basic fmpr~C model accepts a nonempty set. Then we show that a model with a limited version of call-by-name requires exponential space to determine acceptance of a nonempty set, and that a more sophisticated model with rewritable conditional formal parametershas an undecidable halting problem. The same lower bounds apply to the equivalence problem, which in contrast to the situation for the basic fmp model is not known to be decidable (since it is not known whether equivalence of deterministic pushdown automata is decidable)
The virtues of conflict
Modern shared memory multiprocessors permit reordering of memory operations for performance reasons. These reorderings are often a source of subtle bugs in programs written for such architectures. Traditional approaches to verify weak memory programs often rely on interleaving semantics, which is prone to state space explosion, and thus severely limits the scalability of the analysis. In recent times, there has been a renewed interest in modelling dynamic executions of weak memory programs using partial orders. However, such an approach typically requires ad-hoc mechanisms to correctly capture the data and control-flow choices/conflicts present in real-world programs. In this work, we propose a novel, conflict-aware, composable, truly concurrent semantics for programs written using C/C++ for modern weak memory architectures. We exploit our symbolic semantics based on general event structures to build an efficient decision procedure that detects assertion violations in bounded multi-threaded programs. Using a large, representative set of benchmarks, we show that our conflict-aware semantics outperforms the state-of-the-art partial-order based approaches